package ceura.ia.practica;

/**
 * Representación de un nodo en a*, tiene coordenadas, un peso y el coste de una
 * heurística con respecto al destino.
 *
 * @author Sergio Redondo y Jorge Madrid.
 */
public class Nodo {

    /**
     * Valor de la heurística de éste nodo.
     */
    public int H,
            /**
             * Valor de coste que tiene éste nodo desde el origen.
             */
            G,
            /**
             * Posición 'x' de éste nodo.
             */
            x,
            /**
             * Posición 'y' de éste nodo.
             */
            y;
    private int F = -1;
    private Nodo nodoAnterior;

    /**
     *
     * @param H Valor de la heurística.
     * @param G Valor del coste de viaje.
     * @param x Posición 'x'.
     * @param y Posición 'y'.
     * @param anterior Nodo anterior o nodo padre.
     */
    public Nodo(int H, int G, int x, int y, Nodo anterior) {
        this.H = H;
        this.G = G;
        this.x = x;
        this.y = y;
        nodoAnterior = anterior;
    }

    /**
     *
     * @return El valor de aplicar heurística más coste de viaje ( f ).
     */
    public int getF() {
        F = F == -1 ? (H + G) : F;
        return F;
    }

    /**
     *
     * @return Nodo anterior.
     */
    public Nodo getNodoAnterior() {
        return nodoAnterior;
    }

    @Override
    public String toString() {
        return "Nodo: x-> " + x + " y-> " + y + " G-> " + G + " H-> " + H + " F-> " + F;
    }
}
